/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package QuanLiDaiLy.DAO;

import QuanLiDaiLy.DTO.DonViTinhDTO;
import QuanLiDaiLy.DTO.LoaiDaiLyDTO;
import QuanLiDaiLy.DTO.MatHangDTO;
import QuanLiDaiLy.DTO.QuanDTO;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author HuuTri
 */
public class ListParameter {
    /**Chuyển danh sách tham số về chuổi*/
    public static String getParameterFormat(List<Parameter> lParam, ParamType paramtype) {
        Integer count = lParam.size();
        String res = "";
        
        if (count < 1) {
            return res;
        }
        if (paramtype == ParamType.name) {
            res = getParamTypeName(lParam);
        } else if (paramtype == ParamType.value){
            res = getParamTypeValue(lParam);
        } else if (paramtype == ParamType.namevalue) {
            res = getParamTypeNameValue(lParam, ",");
        } else {
            res = getParamTypeNameValue(lParam, "AND");
        }
        return res;
    }
    
    /**Chuyển đối tượng thanh danh sách tham số*/
    public static List<Parameter> getListParameter(Object obj) {
        List<Parameter> resList = new ArrayList<>();
        
        if (obj instanceof DonViTinhDTO) {
            resList = getListParamDonViTinh((DonViTinhDTO)obj);
        } else if (obj instanceof LoaiDaiLyDTO) {
            resList = getListParamLoaiDaiLy((LoaiDaiLyDTO)obj);
        } else if (obj instanceof MatHangDTO) {
            resList = getListParamMatHang((MatHangDTO)obj);
        } else if (obj instanceof QuanDTO) {
            resList = getListParamQuan((QuanDTO)obj);
        }
        return resList;
    }
    
     /**Chuyển định dạng danh sách value*/
    private static String getParamTypeValue(List<Parameter> lParam) {
        Integer count  = lParam.size();        
        String res = "";
        
        for (Integer i = 0; i < count; i++) {
            Object obj = lParam.get(i).getValue();
            if (obj instanceof Integer){ 
                res += obj.toString();
            } else {
                res += "'" + obj.toString() + "'";
            }
            if (i < count - 1) {
                res += ",";
            }
        }
         return res;
    }
    
    /**chuyển định dạng danh sách name*/
    private static String getParamTypeName(List<Parameter> lParam) {
        Integer count = lParam.size();
        String res = "";
         
        for (Integer i = 0; i < count; i++) {
            res += lParam.get(i).getName();
            if (i < count - 1) {
                res += ",";
            }
        }
        
        return res;
    }
    
    /**chuyển định dạng sang name=value*/
    private static String getParamTypeNameValue(List<Parameter> lParam, String symbol) {
        int count = lParam.size();
        String res = "";
        
        for(int i = 0; i < count; i++) {
            Parameter obj = lParam.get(i);
            if (obj.getValue() instanceof Integer){ 
                res += obj.getName() + "=" + obj.toString();
            } else {
                res += obj.getName() + "=" + "'" + obj.toString() + "'";
            }            
            if (i < count - 1) {
                res += symbol;
            }
        }
       return res;
    }  
    
    /**chuyển định dạng từ DonViTinhDTO sang List<Parameter>*/
     private static List<Parameter> getListParamDonViTinh(DonViTinhDTO donvitinh) {
        List<Parameter> resList = new ArrayList<>();
        
        if (donvitinh != null) {
            resList.add(new Parameter(DonViTinhDTO.MADONVI, donvitinh.getMaso()));
            resList.add(new Parameter(DonViTinhDTO.TENDONVI, donvitinh.getDonvi()));
        }

        return resList;
    }
     
     /**chuyển định dạng từ LoaiDaiLyDTO sang List<Parameter>*/
     private static List<Parameter> getListParamLoaiDaiLy(LoaiDaiLyDTO loaidaily) {
          List<Parameter> resList = new ArrayList<>();
        
        if (loaidaily != null) {
            resList.add(new Parameter(LoaiDaiLyDTO.MALOAIDAILY, loaidaily.getMaso()));
            resList.add(new Parameter(LoaiDaiLyDTO.TENLOAIDAILY, loaidaily.getTenloaidaily()));
            resList.add(new Parameter(LoaiDaiLyDTO.NOTOIDA, loaidaily.getNotoida()));
        }

        return resList;
     }
     
     /**chuyển định dạng từ MatHangDTO sang List<Parameter>*/
     private static List<Parameter> getListParamMatHang(MatHangDTO mathang) {
          List<Parameter> resList = new ArrayList<>();
        
        if (mathang != null) {
            resList.add(new Parameter(MatHangDTO.MAMATHANG, mathang.getMaso()));
            resList.add(new Parameter(MatHangDTO.TENMATHANG, mathang.getTenmathang()));
            resList.add(new Parameter(MatHangDTO.SOLUONGTON, mathang.getSoluongton()));
        }

        return resList;
     }
     
     /**chuyển định dạng từ QuanDTO sang List<Parameter>*/
      private static List<Parameter> getListParamQuan(QuanDTO quan) {
          List<Parameter> resList = new ArrayList<>();
        
        if (quan != null) {
            resList.add(new Parameter(QuanDTO.MAQUAN, quan.getMaso()));
            resList.add(new Parameter(QuanDTO.TENQUAN, quan.getTenquan()));
        }

        return resList;
     }
}
